home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 1
/
SPACE - Library 1 - Volume 1.iso
/
apps
/
315
/
opus200.doc
< prev
next >
Wrap
Text File
|
1989-08-04
|
78KB
|
1,783 lines
Opus v. 2.00
--------------
Spreadsheet and Charting program
for the Atari ST
by Doug Harrison
>>> Introduction
Opus is a GEM spreadsheet and charting program, which I think
you'll find powerful, fast, and easy to use. In order to keep this
documentation to a reasonable length, I'll focus primarily on
description of features, rather than provide a full tutorial
(which probably isn't needed). Some of you may be familiar with
the original version of Opus, which appeared in the Sept. 1988
ST-Log. If you fall into this category, great! You can skip over
the majority of the spreadsheet description, but please be sure to
read the section on charts and the files INSTALL.DOC and
CHANGES.DOC.
>>> Shareware
Opus versions 2.00 and above are shareware. Opus version 2.00 is
the result of about 8-9 months of additional work and includes
many new features above and beyond the original; the charting
facility is completely new, and the spreadsheet is much faster in
all operations (for a description of most of the changes and
additions, please see the file CHANGES.DOC). I plan on supporting
Opus with at least one or two upgrades, and I will be available to
answer questions through the mail and on Compuserve and GEnie. If
you find Opus useful and wish to support my efforts, you can send
a check for $15 (or whatever you feel the program is worth!) to:
Doug Harrison
P.O. Box 66236
Baton Rouge, LA 70806-6236
For quick response to questions, my Compuserve ID is 72277,2315
and my GEnie mailbox address is D.S.HARRISON. There also is (or
soon will be) an Opus topic in Category 2 of the GEnie message
base.
>>> Distribution Policy
You may freely distribute Opus (and please do), as long as all
files and notices are included. It may be included as part of
"shareware disks" provided by various groups, as long as no fee
beyond media costs is charged.
>>> Running Opus
IF YOU READ NOTHING ELSE, PLEASE, PLEASE READ INSTALL.DOC!!!! Read
it NOW, before you try to run Opus! It really and truly DOES
contain ESSENTIAL information, OK?! (forgive my tone, I'm just
speaking as I need to be spoken to...)
Here's a list of the files Opus tries to load when it's executed,
in order:
1. OPUSMONO.RSC or OPUSCOLR.RSC (depending on monitor in use)
2. PRINTER.INF (printer control codes)
3. OPUS.CNF (configuration file, explained later)
4. screen fonts, provided GDOS is present
5. OPUS.WID (printer font widths file)
Opus doesn't need to access the disk it was loaded from once it
has booted. However, when printing charts on a floppy-based
system, the disk containing the GDOS files must be present in the
boot drive. Please see the section "Printing Charts" for details.
March 12, 1989 p. 2 Opus v. 2.00
///////////////////////////////////////////////
///// Worksheets /////
///////////////////////////////////////////////
Now that you've got Opus up and running, you should have a blank
worksheet on your screen. Let's first take a look at "The Panel",
the area directly underneath the menu bar.
>>> The Panel
The Panel contains the following items, from left to right:
1. the active cell or cell cursor location
2. an icon area, containing the "cell deletion" icon and
the "data entry" icon (the X and check-mark icons,
respectively)
3. the edit area, in which you enter data, consisting of two
50 column lines.
The panel also may contain up to three additional icons, and these
indicate various states. First, the "Circ" icon may appear should
you enter a formula that contains or makes a circular cell
reference (this icon may show up as "???" if Opus can't determine
circularity- more on this later). Second, if the cell cursor is
moved into a hidden cell, the "H" icon will appear. Finally, the
"P" icon appears when the cell cursor is in a protected cell. A
click on the "Circ" icon will present you with an alert box
indicating the cell containing the circular reference, while
clicking on the "H" or "P" icons will unhide or unprotect the
active cell.
If you want to delete the currently active cell, click on the
cell-deletion icon. Similarly, to complete data entry into a cell,
click on the data entry icon or press RETURN, ENTER, or any of the
cursor keys.
>>> Data Entry
Opus supports the three traditional spreadsheet cell classes:
numbers, labels, and formulas. Unlike other spreadsheets which
require you to precede a label with the apostrophe or formulas
with plus or equal signs, Opus uses the function keys F8, F9, and
F10 to change cell class. You may also perform this action from
the Edit menu. Look under the Edit menu now, and note many items
have keyboard equivalents. All menu items with corresponding
keyboard commands have the commands listed to their right. If
you're unsure of the meaning of some of the symbols, please look
under the Help menu item and click on the Keyboard entry. Here,
you will also find all the ways you can move about the
spreadsheet. For a list of the various mouse functions, please
refer to the Help item Mouse.
March 12, 1989 p. 3 Opus v. 2.00
>>> Cell Format
Opus offers many options for cell format, and they are found under
the Edit menu item. All but the number formatting options are
found in the same dialog, and both of these dialogs reflect the
state of the active cell when they are first displayed. To display
this dialog, click on Justification under the Edit menu. The
Justification button will be selected, indicating that this
parameter is the one that will be changed. In order to alter the
text style, for example, you must select that button as well. Now,
consider the "extent" buttons, which allow you to specify whether
the format changes should affect only one cell, a range, or the
entire worksheet. For example, to change the justification of a
range without altering other formatting within the range, make
sure that the Justification button is the only one selected when
you click on OK or press RETURN. Please note that the sparse
matrix design requires any cell containing data or a format
differing from the global format to *exist*, which means that it
consumes memory. This makes it impossible to format an arbitrarily
large range. However, you may certainly change the default cell
format through the "Global" option, affecting all existing cells
and all cells entered thereafter.
>>> Number Format
Now, pull down the Edit menu and click on Number. This dialog
functions just like the previous one; to select an attribute to be
changed, you must click on its title. For example, to turn off
commas, click on the line "Suppress Commas?", click on the box to
its right (checking it), and then press OK or hit RETURN.
Likewise, if you wish to change the precision, click on the
"Precision" title. The "Format Strings" option allows you to
specify a string that will be output on all numeric or formula
cells possessing that attribute. For example, you could specify a
format string "Part #", and any cell having that as part of its
number format would be display as "Part #xxx", where xxx is its
value. You can use the reverse apostrophe "`" (the key to the left
of Backspace) to specify the value position within the format
string; the default is to append the value to the end of the
string. In order to make a new format string, click on the "Edit
box," and then type in the string. When you're done, click on
"Add." The string will appear in the scrollable list. To make the
string part of a cell's format, click on the string within the
scrollable list and also on the "Format Strings" title before
exiting the dialog.
The "Global Upper and Lower Limits" fields contain the values
above and below which the cells will display as scientific
notation. For example, if the global lower limit is 1E-3, any cell
containing a value whose magnitude is less than 0.001 (but not
equal to zero) will be displayed in scientific notation.
Note: Many Opus dialogs use a worksheet range as a parameter. If a
range was selected before the dialog was invoked, that range will
appear in the "Begin" and "End" fields in the dialog. In the case
of the format dialogs, the "Range" button will also be
preselected. If a range was not selected, however, the extent of
March 12, 1989 p. 4 Opus v. 2.00
the format dialogs will be set to "Cell," meaning that the active
cell alone will be affected (provided you don't override this). In
the case of the Number format dialog, the "Use All" button will be
preselected as well, so that you needn't click on all the
attribute titles you want to alter.
>>> Block Commands
A block or range is simply a rectangular group of one or more
cells. You can select a block by dragging the mouse or clicking on
the Start and End Block items under the Block menu. If you're
using the mouse, the worksheet will scroll if you move off the
working area. When a block is selected, several worksheet
functions become available. The Show First Cell and Show Last Cell
items under the Marks menu change to Show Block Start and Show
Block End. Under the Block menu, Copy, Move, and Delete Block
become available. Before discussing the items under the Block
menu, let's take a look at the difference between relative and
absolute cell references.
>>> Cell References
Cell references within formulas are divided into relative and
absolute types. A relative cell reference is written as A1, while
absolute cell references are written as $A1, A$1, or $A$1. The
dollar sign indicates whether the row or column part of the
reference is to be considered absolute, meaning that it is "cast
in stone" and will never be altered by any worksheet function,
such as Move Block, Replicate Cell, or Insert Row. To clarify,
consider the worksheet below:
A B
1 1 A1+1
2 B1+1 A2+1
If you selected the range A1:B2 and then chose to move it to cell
A3, the resultant worksheet would appear as follows:
A B
1
2
3 1 A3+1
4 B3+1 A4+1
As you can see, the relationships between the formulas have
remained intact. Were those cell references absolute, they would
not have been altered by the move.
Note that several worksheet functions give you the option to
consider *all* cell references as absolute, and these include Copy
and Move block, Insert and Delete row/column, and Replicate Cell.
March 12, 1989 p. 5 Opus v. 2.00
>>> Copy and Move Block
These functions, along with Delete Block, are only available when
a block is selected. So, to copy or move a block, first select
one, and then move the cell cursor to the cell you wish to be the
upper-left corner of the destination block. When you choose one of
these, you will first be asked to confirm your selection, as there
is no "Undo" function. Then, you will be asked whether to treat
all cell references as absolute, including the relative ones.
Generally, you'll want to choose "Relative," so that only the true
absolute references will be considered absolute. And in any event,
a relative reference will only be adjusted provided it points to a
cell contained within the selected range, which consequently also
changes position. As a final point, be aware that cells *outside*
the source range containing formulas with cell references pointing
within the source range will *not* be altered, even if the range
is moved. For example, suppose cell F1 references cell A1, and you
move the range A1:B2 to cell A3. F1 will continue to reference
cell A1.
>>> Delete Block
Permanently deletes a block.
>>> Insert and Delete Row/Column
These functions allow you to specify whole or partial row and
column insertion and deletion. As an illustration of "partial," a
partial row is defined as follows. First, if no block is selected,
the partial row extends from the active cell to the rightmost cell
in that row. If a block is selected, then the partial row extends
from the upper-left cell in the block to the rightmost cell in
that row and within the block. For the sake of the operation, a
"virtual block" is defined as consisting of the partial row plus
all partial rows below it. A partial column is defined in an
analogous manner. This allows a rather flexible definition of the
extent of these operations, so that, for example, it's easy to
insert a row at row #18, confined to columns F and G, rather than
extending over the entire worksheet space (columns A..IU). Without
the "partial" option, you would have to select the range F18:G998
and then move it to cell F19.
Note: These operations are really block moves, and the description
of the handling of cell references for block moves applies here as
well.
>>> Data Fill
This function fills a range with numbers, beginning at some
initial value to which some increment value is added for each
cell. You specify the direction of the data fill as "Right" or
"Down."
March 12, 1989 p. 6 Opus v. 2.00
>>> Replicate Cell
This function copies a cell throughout a range. If the cell
contains a formula, then relative cell references are adjusted,
provided you haven't click on the "Absolute" button in the dialog.
Note that it doesn't matter whether cell references point to cells
within the selected range, as it does for block copying and
moving.
>>> Sort
This function uses the ShellSort algorithm to sort a range on a
row or column basis. For example, consider the range A1:C10, which
is to be sorted by row. For "Key Cell," I specify cell B1, meaning
cells in column B are compared. Then rows 1-10 are sorted based on
the values in column B, for columns A-C. You may also specify
ascending (low to high) vs descending (high to low) as the "sense"
of the sort. The precedence of cells is as follows, from lowest to
highest:
1. Empty cells
2. Values (numeric or formula cells)
3. Labels.
Note that relative cell references in formulas aren't affected by
the sorting operation (in other words, any cell reference is
treated as if it's absolute).
>>> Auto Cursor
To illustrate this feature, select a range and position the cursor
anywhere within it, except the last cell. Now press RETURN, and
observe, the cursor advances to the next cell. You may specify the
direction for the auto cursor through the Options menu, and you
may also turn it off. This feature comes in really handy when you
have a lot of numbers to enter, as you can first select a range
and then enter the data solely through the numeric keypad. The
worksheet also scrolls properly if the range extends beyond the
displayed portion.
And that about does it for the block operations. Let's forge ahead
and consider formulas and functions, but first a few words about
recalculation modes.
>>> Recalculation
Opus provides natural order recalculation, meaning that during
evaluation of a formula, any cell references are calculated before
their values are used. This ensures that formulas containing
references to other cells are calculated based upon up to date
values.
Opus also provides an automatic recalculation feature, meaning
that if you change the value of a cell that is referenced by some
formula, that formula will be recalculated automatically. This is
a little different from other spreadsheets that provide a similar
function, in that Opus doesn't recalculate the entire spreadsheet,
March 12, 1989 p. 7 Opus v. 2.00
but rather, just those cells that are affected by the change. This
method (also called minimal recalculation) can be much faster for
large worksheets and literally makes this a usable feature. How
does Opus know what cells are affected? Briefly, each cell that is
referenced by a formula has a "dependent cell list," and when you
change the value of such a cell, Opus can traverse this list and
recalculate all the other cells that depend on the cell's value.
Note that having a dependent cell list requires a cell to exist,
meaning it consumes memory. Be aware that range references within
formulas cause an entry to be placed in the dependent cell list of
every cell within the range, and the cells will be created as
necessary. This precludes the use of arbitrarily large ranges in
formulas, lest you're fond of "out of memory" errors.
Finally, note that you may turn off natural order and automatic
recalculation through the "Options" menu. With both turned off,
recalculation proceeds in a row by row fashion, which can be
useful in some applications (the supplied amortization spreadsheet
depends on it). Now, it may rarely be necessary to turn off these
features, so that Opus may complete the recalculation; you will be
informed of this with a friendly alert box. For example, consider
the worksheet below:
A B C...........IT IU
1 B1+1 C1+1 D1+1.......IU1+1 A2+1
2 B2+1 C2+1 D2+1.......IU1+1 A3+1
.
.
100 B100+1 C100+1 D100+1.....IU100+1 1
In order to calculate cell A1 using natural order, the value of
cell B1 must be known. But to calculate B1, the value of C1 must
be known. And so on, for 25,500 cells. Essentially, this involves
a recursive algorithm, that is, a function that calls itself. If
this function was allowed to call itself 25,500 times without
returning in the meantime, the machine would surely crash. But
don't worry, this can't happen in Opus 2.00; at worst, you will be
informed of this state with an alert, "Stack is nearing
overflow...", and you should then turn off natural order and/or
automatic recalculation. In general, you'll never see this alert,
as it requires a fairly large and somewhat contrived spreadsheet
before it appears. This worksheet also confounds determination of
circularity for similar reasons; it most definitely will cause the
"???" icon to appear in the Panel.
>>> Global Recalculation
When you select "Recalculate" from the "Options" menu or press F1,
Opus recalculates the entire spreadsheet, and this is called a
global recalculation. Natural order will be used, provided it
hasn't been turned off. However, the state of the automatic
recalculation mode isn't relevant here, since we're recalculating
the entire worksheet.
March 12, 1989 p. 8 Opus v. 2.00
>>> Formulas
Formulas in Opus consist of valid arithmetic expressions, composed
of the following:
- numbers, followed by an optional percent sign
- cell references
- arithmetic operators +, -, *, and /
- logical operators =, <>, <, <=, >, >=
- unary minus, "-" (i.e. negation operator)
- functions and their parameter lists, but without the silly
'@' sign required by other spreadsheets
- expressions in parentheses.
Numbers have 17 decimal digits of precision, and the range is
+/- 1E-37 ... +/- 1E37 or thereabouts.
At present, Opus doesn't support strings in formulas or string
functions; a future update likely will. The maximum formula length
is 100 characters. Opus follows the usual rules of operator
precedence, summarized below, from highest to lowest:
- unary minus
- expressions in parentheses
- *, /
- +, -
- =, <>, <, <=, >, >=
Operators with equal precedence are evaluated left to right, so
that 6/3/4 is interpreted as (6/3)/4, rather than 6/(3/4).
>>> Functions
The heart of any spreadsheet lies in its list of functions; Opus
provides some 59 functions, which I will divide into the following
categories: Arithmetic, Power, Trig, Logical, Statistics,
Regression, Probability, Financial, Lookup, Cell, Range, and
Miscellaneous. Please note that range references are written as
two cell references separated by the colon, as in "A1:F5".
>>> Arithmetic
- DIV, MOD (numerator, denominator)
These are division and modulus functions that satisfy
the equation below (for both real and integer values):
x = DIV(x,y)*y+MOD(x,y)
- ABS (expr)
Returns the absolute value of expr.
March 12, 1989 p. 9 Opus v. 2.00
>>> Power
- LN (expr)..............natural logarithm (base e)
- LOG (expr).............log base 10
- EXP (expr).............e raised to a power
- POW (expr1,expr2)......expr1 raised to expr2 power
- SQR (expr).............square
- SQRT (expr)............square root
>>> Trig
All the trig functions (except RAD) expect angles to be
specified in radians, and the inverse trig functions return a
radian value.
- SIN, COS, TAN (angle)........sine, cosine, tangent
- ASIN, ACOS, ATAN (expr)......inverse functions
- SINH, COSH, TANH (angle).....hyperbolic sin, cos, tan
- ASINH, ACOSH, ATANH (expr)...inverse functions
- RAD (angle in degrees).......returns angle in radians
- DEG (angle in radians).......returns angle in degrees
- PI().........................returns pi
>>> Logical
Operators: =, <>, <, <=, >, >=
IF (condition, action, alternate action)
The three IF parameters may be any valid expression,
including nested IFs. IF returns the value of "action"
when condition evaluates to non-zero, and it returns
"alternate action" when condition evaluates to zero.
AND (expr1, expr2, expr3, ...)
Returns 1 if all parameters are non-zero, and 0 if any
evaluate to zero.
OR (expr1, expr2, expr3, ...)
Returns 1 if any parameter is non-zero, and 0 only if
all evaluate to zero.
NOT (expr)
Returns 1 if expr evaluates to zero, and 0 if expr
evaluates to non-zero.
Both AND and OR require at least two parameters.
>>> Statistical
- SUM (range)
Computes sum of all values within range. Empty cells and
labels are considered to have value 0.
March 12, 1989 p. 10 Opus v. 2.00
- PROD (range)
Computes product of all values within range. Empty cells
and labels are considered to equal 1. Should the range
contain no values, PROD returns 0.
- MEAN (range)
Computes the mean or average of all values within range.
Empty cells and labels aren't considered.
- VAR (range)
Computes the sample variance for range, ignoring empty
cells and labels.
- SDEV (range)
Computes the sample standard deviation for range,
ignoring empty cells and labels.
- SERR (range)
Computes the sample standard deviation of the mean (the
standard error) for range, again ignoring empty cells
and labels.
- MAX, MIN (range)
Return the maximum and minimum values within the range.
- COUNT (range)
Returns the number of cells containing values within
range.
>>> Regression
Note that these three functions all require the "Type"
parameter, which is explained under REGR.
- REGR (type, y-range, x-range)
Performs linear regression via the least squares method
on any of the following models:
Type Equation Model
0 y = Mx+B Linear
1 y = Be^(Mx) Exponential
2 y = B+M*ln(x) Logarithmic
3 y = Bx^M Power
Please note that Opus performs the proper transformation
on the data for you, so you aren't required to have a
separate column for e^x to use the exponential model,
for example. REGR returns the value "M" in the cell
containing the formula and the value "B" in the cell
March 12, 1989 p. 11 Opus v. 2.00
immediately to its right. "B" will overwrite this cell,
so make sure you store no data there!
- PREDV (type, y-range, x-range, x-expr)
This function calculates the value "y" based on the
regression parameters M and B for the value "x-expr". Be
aware it is more time and memory efficient to simply
plug the number into the proper equation, provided of
course you have already determined M and B through REGR.
- CORR (type, y-range, x-range)
CORR rounds out the regression functions. It calculates
the correlation coefficient, which is a measure of
goodness of fit.
The regression functions allow empty cells within their
ranges. X and y values are associated by their cell locations
within their respective ranges, not by the number of empty
cells that may separate them. For example, consider the range
A1:A5 below:
A B
1 1
2 empty
3 empty
4 2
5 3
For the sake of the regression calculation, value 1 is cell
A1, value 2 is cell A2, and so on. It is perfectly legal to
have an x-value without a corresponding y-value; that x-value
will simply be discarded from the calculation. However, the
reverse is not true; should you specify a y-value without a
corresponding x-value, any of these functions will return an
error. I chose Opus to work in this manner because in my
work, I'm often collecting sets of data from several trials
of the same experiment, where the known values are the same
from trial to trial. Occasionally, during a trial one of the
data points gets botched, and it should be discarded from the
calculation. By simply deleting the cell which would
otherwise contain that y-value, I can use the same template
for analyzing all the data sets. (I wish my Hewlett-Packard
calculator worked this way; instead, it forces me to delete
any x value without a corresponding y value, altering the
relationships between other data sets which may be in its
memory)
Finally, all the regression functions allow ranges spanning
more than one column or row. Values are associated on a row
by row basis.
>>> Probability
RAND (lower bound, upper bound)
Returns a random number between the given lower and
March 12, 1989 p. 12 Opus v. 2.00
upper bounds. The difference between these two numbers
must be less than 16,277,216, since this is the range of
the ST's random number generator.
COMB, PERM (x, y)
Combinations and permutations of x objects taken y at a
time.
>>> Financial
These functions operate somewhat differently from those in
the original version of Opus. First, all parameters are
required. Second, I've adopted a convention taken by my HP-
27S calculator and also, at least, by the Microsoft
spreadsheet Excel. This involves breaking down money values
into cash inflows, which are expressed as positive numbers,
and cash outflows, expressed as negative numbers. For
example, the PMT function will normally return a negative
value, as you are "paying money." I found this method
confusing at first, but I grew to prefer it, and since I
(occasionally) like to support standards...
The "type" argument appears in all the financial functions,
and if equal to 1, it indicates payments occur at the ends of
periods (ordinary annuities). If type equals 0, payments are
assumed to occur at the beginning of periods (annuities due).
Note that for some combinations of arguments, namely those
implying a simple or compound interest calculation, the type
field will be meaningless; nevertheless, it is required as a
place-holder.
The number of compounding periods should be whatever is most
appropriate; for example, 365*n for daily compounding over n
years. The rate arguments refer to the interest rate per
compounding period, so for monthly compounding over 1 year at
12% interest, rate would equal 12%/12, or 1%, while # periods
would equal 12.
For working, real world examples of the financial functions,
I refer you to the files "FINCALC.OPS" and "AMORTIZE.OPS."
- PV (rate, # periods, payment, future value, type)
Computes present value.
- FV (rate, # periods, payment, present value, type)
Computes future value.
- NPER (rate, payment, present value, future value, type)
Calculates number of periods.
- PMT (rate, # periods, present value, future value, type)
Calculates payment.
March 12, 1989 p. 13 Opus v. 2.00
- RATE (#periods, payment, present value, future value, type,
guess)
Computes interest rate. RATE uses an iterative method
(Newton's) to find rate; it requires a "guess value" to
seed the process, and you should try using a value less
than what you expect RATE to return. (Good starting
points for guess are values like 0.01, 0.001, etc.) RATE
returns an error if it can't find a reasonably accurate
solution within 20 iterations.
The financial functions are based on the following equation,
and RATE successfully returns if it finds an interest rate
that satisfies the equation to an accuracy of 1E-8. (Equation
from Hewlett Packard 27S calculator manual)
0 = PV+(1+(i%*S)/100)*PMT*USPV+FV*SPPV,
where
S = payment mode (0 for end mode, 1 for begin mode. Note
this is exactly opposite to what the functions
expect as an argument; the value 1 seemed more
logical than 0 to indicate a date later in the
period.)
i% = periodic interest rate
n = number of compounding periods
SPPV = (1+i%/100)^-n
USPV = (1-(1+i%/100)^-n)/(i%/100)
>>> Lookup
- INDEX (row index, column index, range)
INDEX returns the value of a cell within range, located
by row and column index, which must be numbers greater
than or equal to one. These indices represent offsets
into the range, such that the upper-left corner of the
range has 1,1 for its indices. For example,
INDEX(1,1,A1:B5) returns the value of A1, while
INDEX(3,2,A1:B5) returns the value of B3 (row 3 and
column 2 within the range A1:B5).
- VLOOKUP (value, column index, range)
VLOOKUP searches in the first column of the indicated
range for the greatest value less than or equal to the
value you supplied, and it returns the value in the same
row as this cell, with the column determined by "column
index" as an offset into the range. Like INDEX above, a
value of 1 indicates the first column within the range,
2 the second, and so on. The function is a "vertical
lookup," as it searches in the vertical direction. An
error occurs if no match is found or the index
references a column outside the block.
March 12, 1989 p. 14 Opus v. 2.00
- HLOOKUP (value, row index, range)
This function is exactly analogous to VLOOKUP, except
that it performs a horizontal lookup. That is, it
searches the first row of the indicated range, looking
for a value less than or equal to the value you
supplied, and it returns the value in the same column as
this cell but in the row indicated by "row index."
Again, the row index is an offset into the range, such
that row index = 1 indicates the first row of the range.
>>> Cell
- ISERR (cell ref)
Returns 1 if the cell referenced has an error status and
0 otherwise.
- ROW, COLUMN (cell ref)
Return the row and column number of the argument.
>>> Range
- ROWS, COLUMNS (range)
Return the number of rows or columns in the range
supplied.
>>> Miscellaneous
- FAC (expr)
Computes the factorial of expr, which must be an integer
such that 0 <= expr <= 33.
- ROUND, TRUNC (expr, place)
These functions take an expression and either round or
truncate it to the value specified by "place." Place may
be positive, negative or zero, and I think an example
will clarify the differences. Consider the number
126.556, supplied to ROUND and TRUNC, for the following
values of place:
expr = 126.556
place ROUND TRUNC
2 126.56 126.55
1 126.6 126.5
0 127 126
-1 130 120
-2 100 100
-3 0 0
As you can see, you can round or truncate within the
whole number portion of the expression, as well as
within the fractional portion.
March 12, 1989 p. 15 Opus v. 2.00
>>> Cell Status
Every living cell has an associated status which tells Opus
whether it's full, empty, or for some reason generated an error.
Error-trapping in formula evaluation is extensive, and I think,
complete. For example, if a formula caused a division by zero, the
cell will display a "DivBy0" error message, and any cell that
referenced it will also assume this status upon recalculation.
There are several other error messages, and they are used
depending on the nature of the offense. The syntax error is a
special case; should you enter a formula that's semantically
incorrect, Opus will "keep you in that cell" and (usually) place
the cursor near the source of the error in the edit area.
Users of the original version will be glad to hear that Opus will
no longer crash upon floating point overflows; this was an
additional benefit of putting Personal Pascal on the shelf and
rewriting Opus in Mark Williams C. Now, floating point overflows
will display as "a very large number." There remains only one
loose end in the error-checking; Mark Williams C is supposed to
set a certain variable when the library function "pow" overflows,
and it doesn't. Thus, the spreadsheet function POW and several
others, including the financial functions, will generate "a very
large number" upon pow overflow, and the cell status won't reflect
the error condition. Hopefully, MW Co. will correct this in a
future compiler update.
>>> Named Cell and Range References
Opus v. 2.00 and above support named cell and range references, so
that you may give a cell or range a friendly English-language name
for use within formulas. These "aliases" may be up to 10
characters long; they consist of alphanumeric characters and the
underscore and may not begin with a numeral. Also, you aren't
allowed to create a name that duplicates a valid cell reference or
a function name. Opus supports as many as 100 of these aliases,
and you create them through the Define Name dialog, which is found
under the Options menu. To use this feature, enter the name you
wish to define in the "Name:" line and also the cell or range
reference (using dollar signs to indicate absoluteness) in the
"Refers To:" line. Then, add it to the list by clicking "Add." The
name will appear in the scrollable list (which is always sorted),
and it will be available for use in functions. To delete a name,
click on it and then click "Delete." It will be removed, and all
occurrences of that name within the worksheet will be replaced by
the underlying explicit cell or range reference. Note that when
you click on one of the names in the list, Opus places that name
and its value in the two editable fields below the list. As long
as you don't alter the name itself, you may then modify the
"Refers To:" line and click on "Add" to lock in the modification.
When deleting or altering names, there may be a slight delay as
Opus performs some housekeeping (converting names to explicit
references, validating what in effect may be completely new
formulas, updating dependency lists, etc.). Bear in mind these
named references behave exactly like explicit ones, following the
same rules governing adjustment for worksheet operations such as
copy, move, insert row, and others previously described. You may
March 12, 1989 p. 16 Opus v. 2.00
notice when copying, moving, or replicating formulas that Opus
substitutes the explicit reference for the named reference. This
happens when a named reference needs to be adjusted; there just
isn't any good way to make a single name point to more than one
cell or range! However, this substitution will not be applied to
completely absolute named cells or ranges, since these are never
adjusted.
>>> Files
You may save and load whole worksheets and blocks; block files
consist solely of data, while worksheet files contain the data,
all the user settings, and the four charts. A block may be merged
into the current worksheet, while loading a file causes the
current worksheet to be erased.
File operations are much faster in Opus 2.00, largely due to use
of a custom 10 sector buffering scheme. In other words, Opus
always reads or writes 10 sectors worth of data when it accesses
the disk, unless of course there simply isn't enough data to fill
10 sectors. The speed increase is truly remarkable, and to take
full advantage of it on floppies, be sure to use a "twisted" disk
formatted for 10 sectors/track.
Please note that Opus 2.00 files are not compatible with the
original; too many fundamental changes were made. However, I will
maintain compatibility with this version in future updates.
>>> Printing
You control worksheet printing through the Print dialog, found
under the File menu. You may enter two title lines, and these will
appear on the first page only. Opus supports one-line headers and
footers; you may easily include such things as page number, file
name, date, and time, and any part of a header and footer may be
left, right, or center justified. To see how to accomplish this,
please refer to the Help menu item Print/Save As Text. The only
really new features here are the margin and lines/page fields;
margins are specified as number of characters or lines from the
respective side of the page. For example, a right margin of 5 will
leave a 5 character margin on the right side of the page. The
other Print dialog options should be reasonably self-explanatory.
In order for features such as condensed print and draft vs. final
to work, Opus needs to know the proper control codes for your
printer. Since these are everything but standardized, I've
included a program, PRINTDEF.PRG, so that you may customize Opus
for your printer. Please see the file INSTALL.DOC for details on
PRINTDEF.
To wrap up this subject, you may also save a file as text, which
really means print a standard ASCII file to disk. This file will
include titles, headers, footers, etc., but it will not contain
any text special effects (naturally).
March 12, 1989 p. 17 Opus v. 2.00
>>> Freeze Titles
To freeze a row and/or column, position the cell-cursor in the
*last* row or column on the screen you wish to freeze. For
example, suppose you have rows 5 through 20 on the screen, and you
want to freeze rows 5-15. Place the cell cursor in row 15, and
choose Freeze Titles from the Options menu. Select Row and press
OK. Now, you may scroll downwards, while the frozen rows remain on
screen; you are also prevented from advancing the cursor above row
16. This can be very useful when you have labels over several
lines that you'd like to keep in view at all times. Although
freezing affects the screen appearance, it has no effect on
printing.
>>> Defaults
Opus 2.00 allows you to save your favorite settings in a
configuration file, OPUS.CNF, which is loaded at boot-time. This
file contains default path information, worksheet options, and
chart options. You may change the defaults and save a new
configuration file through the Defaults item under the File menu.
To change paths, click on the path lines and select a new one with
the item selector. Besides the paths, OPUS.CNF contains the
following items:
- global column width
- global cell format
- auto-cursor status and direction
- natural order and automatic recalculation statuses
- show formulas status
- grid on/off
- small font (for monochrome)
- printer:
- show row/column titles
- condensed print status
- show formulas status
- header
- footer
- draft vs. final
- top, bottom, left, and right margins
- lines/page
- charts:
- all user-controlled options (except selected ranges),
taken from current active chart
Note: The Temporary Files path refers to the path where the
temporary metafile and worksheet files will be saved during chart
printing. More to come...
March 12, 1989 p. 18 Opus v. 2.00
///////////////////////////////////////////////
///// Charts /////
///////////////////////////////////////////////
NOTE: If GDOS isn't installed, you won't be able to chart. If you
aren't sure how to create a proper ASSIGN.SYS or OPUS.WID file,
please see INSTALL.DOC for instructions (it's really pretty easy,
as I've written two short programs to facilitate the process).
>>> The Basics
The charting facility is implemented as a mode separate from the
worksheet. To create a chart, you first select ranges from the
worksheet for the chart data sets, and then select To Chart from
the worksheet Chart menu. This takes you to a new screen and menu
bar, from which you may customize the chart's appearance and print
it. Opus displays the chart in a window whose maximum size is 8
inches wide by 5 inches tall, and the screen display is a very
close approximation of the final printer output. Finally, to get
back to the worksheet, select To Opus from the chart File menu.
Note that you can easily flip back and forth by pressing the
control-C key.
In the following sections, I'll describe some of the charting
conventions. Since I feel the charting features are mostly
intuitively obvious, afterwards I will simply run through the menu
items and explain some of the subtler points, leaving the rest to
experimentation. However, it is probably a good idea to read the
section on saving metafiles and printing charts, which are found
under the "File" heading.
>>> Axis Naming Conventions
All chart types except Pie are essentially plots of the equation
y = f(x), where y is a variable that depends on the value of x. X
is typically associated with the horizontal axis and y with the
vertical, but since Opus allows rotation of the axes, this
distinction can become blurred. Since x is more properly referred
to as the "independent variable" and y as the "dependent
variable," I call the axes "Dependent Axis" and "Independent
Axis."
>>> Data Series
A data series is simply a set of values associated with an axis
variable. The Independent Axis may have only one associated data
series, but you may specify up to six Dependent Axis series,
identified by the letters A-F. To select a range as a data series,
first select a worksheet range, drop down the worksheet Chart
menu, and click on the desired item under the greyed-out "Data
Ranges" label. A small dialog appears, containing the range
definition. Press OK to complete the process, and the chosen menu
item will be checked to indicate it's in use. To delete a series,
March 12, 1989 p. 19 Opus v. 2.00
click on the appropriate menu item and click on the Clear button
within the select-range dialog.
In order to produce a Pie chart, you must first select a range for
the Independent/Pie series (this one does double-duty). To produce
any of the other chart types, you must select at least one
dependent variable range. The dependent and independent variables
are associated exactly as for the worksheet regression functions.
That is, ranges may extend over more than one column; they are
associated on a row by row basis. Also, it is perfectly legal to
have an independent value without a corresponding dependent value,
but the reverse is not true.
Finally, you may specify labels for the independent range for any
chart type except Pie; if the first cell within the independent
range is a label, all the rest must also be labels. The labels
have implicit values of 0, 1, 2, ...
>>> Plotting Standard Error Bars and Regression Lines
These may be automatically plotted, providing you've created the
formulas in the worksheet. Simply associate the ranges with the
appropriate data series. Note that for regression, you must select
the slope and y-intercept cells as a range, and the slope must be
the first cell in the range.
>>> The Screen Display
The size of the chart as displayed on the screen is very nearly
the same as the final printed size, and the relationships between
objects are practically identical between the screen and printer.
When you alter the chart size, you will find that the window
containing it expands or shrinks, and it is centered at all times.
The window size corresponds to the chart area, with a 0.1 inch
margin around all sides. It also reflects the "frame" that will
contain the chart when it's imported as a metafile into another
program.
Since redrawing the screen can take a couple of seconds, I thought
it preferable to redraw the screen only when requested. Thus, you
may make many changes affecting a chart's appearance, and when
done, press 'D' to force a redraw. About the only time the chart
is drawn without the user's request is when he flips over from the
worksheet, changes the chart size, or selects a new chart with the
chart switcher.
>>> Markers
The objects indicating plotted points are called markers. For line
and scatter charts, the markers are as follows: data series A:
circle, B: square, C: up triangle, D: cross, E: down triangle, F:
plus. Bar, pie, and area markers are differentiated on the basis
of fill pattern. Be aware that in color, the circle marker may
appear as a plus sign at the standard size of 0.08 inches due to
March 12, 1989 p. 20 Opus v. 2.00
the limited resolution, but it will print fine (details on
altering the size follow).
>>> The Chart Switcher
Opus supports four charts per worksheet, and you select them
through the Chart Switcher dialog. This dialog is accessible from
both the worksheet Chart menu and the chart File menu. To restore
a chart to the default settings and clear all range definitions
for that chart, click on the Restore Defaults button.
>>> Measuring
Many dialogs allow you to alter the sizes of objects; Opus uses
inches for all measurements.
>>> The File Menu
A. Save Metafile...
Opus is capable of saving two types of metafiles, a
standard one (.GEM) suitable for programs that read
metafiles, like Publisher ST, and a special one (.GEO)
intended for later printing by OutChart. Opus will ask
you to specify the format before allowing you to choose
a file name; choose "Standard" if you intend to load the
metafile from another (unrelated) application and
".GEO" if you plan on printing the file from OutChart.
Note: OutChart doesn't like standard metafiles at all;
please feed it .GEO files, unless you enjoy "Corrupted
Metafile" error messages (read on for explanation).
Although programs like Publisher ST allow scaling of
imported metafiles, for best results you should keep the
relative horizontal and vertical dimensions the same.
You may notice that the square marker types vary in size
somewhat in a metafile imported into Publisher, even
though the chart is set to the right size. This is
simply a consequence of round-off error in calculating
the size of the box on the screen (although the box is a
square by metafile standards, some round-off error
occurs depending on where the box is to be located on
the screen or page). As you would expect, this effect
decreases in significance as the resolution of the
output device increases; that is, it's most noticeable
on the color monitor and hardly noticeable on a 150 DPI
printer. Before printing a chart, Opus saves a temporary
metafile which it later interprets; Opus isn't afflicted
with similar round-off errors because it uses some
special metafile commands to ensure uniform sizes for
markers. OutChart metafiles contain these special
commands as well. Unfortunately, other programs wouldn't
know how to interpret these special commands, so "Save
Metafile" can also save a standard one that should be
March 12, 1989 p. 21 Opus v. 2.00
compatible with any program that claims to load
metafiles.
B. Print...
Prints the chart. An option for a final formfeed is
present, since some printer drivers execute a formfeed
when Opus closes the printer workstation, but others
don't. For details on sizing the chart and placing it on
the page, please refer to Chart Dimensions under "The
Edit Menu." See the file OUTCHART.DOC as well for an
alternative to printing from within Opus.
To conserve memory, Opus loads the printer driver and
fonts at print-time. The process is as follows:
1. Opus saves a metafile and the worksheet, in the
path specified for Temporary files
2. Opus releases the worksheet memory and screen
font memory to the system,
3. Opus loads the printer driver and fonts,
4. Opus reads in the metafile and prints the chart,
5. Opus releases the printer driver and font
memory,
6. Opus reloads the screen fonts,
7. Opus reloads the worksheet,
8. Opus deletes the temporary metafile and
worksheet file.
For this to work, several conditions must be satisfied.
First, you must have your GDOS disk in the boot drive or
have the files set up on a hard drive. Second, you must
specify a drive with enough free space to store the
temporary metafile and worksheet files (metafiles
typically range 2-10K; worksheet files vary considerably
more). Third, you must have enough free RAM in the
system to load the printer driver and fonts. FONTWID.PRG
provides this information, when you create your OPUS.WID
file. When you first load Opus, before entering any
data, check Statistics under the worksheet Options menu
and make sure the System Memory is greater than or equal
to the memory required to print, as given by FONTWID.
Although printing is a rather disk-intensive process, it
really is pretty fast on a hard drive system. For best
results on any system, set the Temporary Files path to a
RAM disk, but make sure you have enough free RAM to
print!
Finally, I should note that the ST's memory allocation
system is flawed. Under some essentially unpredictable
conditions, after printing you may find yourself with
less worksheet RAM than before. This is due to memory
fragmentation and is generally not a problem, unless
your worksheet is already pushing the free RAM limits.
In this case, you may find yourself with too little
memory to reload the worksheet. To protect yourself from
this, always save your worksheet before printing a
chart. Fortunately, the fragmentation seems to occur
only with the first printout; I've printed more than 10
March 12, 1989 p. 22 Opus v. 2.00
charts in a single session with no problems beyond
losing 30K of worksheet space due to the fragmentation.
C. Load/Save Chart
Presently not implemented, since four charts are saved
with the worksheet. If there's enough demand, I may add
these in a future update.
D. Chart Switcher...
Allows you to select any of the four charts. To simply
switch from one chart to another without calling this
dialog, press the appropriate number key.
>>> The Edit Menu
A. Axes
Allows you to fine-tune the axis appearance as needed.
To switch from editing one axis to the other, click on
the shaded title bar at the top of the dialog. I believe
all the options are pretty self-explanatory, except "the
axis crosses other axis at tic mark#" option. Opus
always tries to determine a "nice" place for the axes to
cross one another. You may override the default choice
by clicking on the number field. This will highlight it
and enable the up and down arrows beside it. You may
then increase or decrease the value by clicking on the
arrows. Note that tic# 0 refers to the lowest tic on the
vertical axis and the leftmost tic on the horizontal
one.
B. Chart Dimensions
You may create charts of any size up to 8 inches wide by
5 inches tall. You may specify the placement of the
chart on the page through the left and top margin
values. Some printer drivers support only an 8x10 inch
area, such as my Migraph Deskjet drivers. Thus, to
horizontally center a chart 7 inches wide and 5 inches
tall, I specify 0.5 inches as my left margin (left
margin = (8-7)/2). To vertically center the same chart,
I specify 2.5 inches as the top margin (top margin =
(10-5)/2). Some printer drivers may allow printing to
the entire 8.5 inch width of a page (or 11 inch height),
so you may have to experiment a bit to determine the
proper offsets. Remember, when you create a chart AxB
inches in size, these numbers include a 0.1 inch margin
around the entire chart area.
C. Legend
A legend allows you to give a label to each of the data
series on multiple-series charts. The legend may appear
to the right of the chart or below it, and the "legend
labels" are preceded by the marker associated with the
March 12, 1989 p. 23 Opus v. 2.00
series. To change the size of these legend markers,
enter a new value into the Chart Dimensions dialog under
the "Marker Size" field. For bar, pie, and area charts,
the marker is a small filled box, and the size of these
markers is twice the size entered under Marker Size (I
did it this way so I could easily flip between scatter
and bar charts and not worry about getting huge chart
markers or tiny legend markers).
The Edit button allows you to create or modify the
legend labels. You will note 12 lines in this dialog;
the last six are for Pie charts, where each slice may
have a legend entry. When you select a range for legend
text from the worksheet, the labels are copied into the
legend text array and are from that point separate from
the worksheet.
D. Pie Appearance
You may have pie slice values, percentages, and legend
labels appear by the slices or within the legend, in
various combinations. If you choose "By Slices" for some
of these and have the standard legend appear to the
right of the Pie, the slice labels may overlap the
legend (sorry, but this is the only case where the chart
doesn't get out of the way properly. Maybe next
revision). To correct for this, you may enter a larger
value for the Legend distance into the Chart Dimensions
dialog.
E. Scaling
Opus generally selects a nice numeric range for your
data. To override the defaults, invoke the scaling
dialog and click on the entry you wish to change (you
may not edit it otherwise). It will be highlighted,
indicating user settings are in effect.
F. Titles
Opus provides two-line titles for each axis and the
chart itself. Independent axis titles are shown as I1:
and I2:, while dependent axis titles are shown as D1:
and D2:. Just as with legends, you may copy a worksheet
range into the titles array. You may then edit or create
new entries through the Titles dialog. To change font or
special effects, click on the entry you wish to change,
and the font selector will appear. To turn off titles,
uncheck the box at the upper right of the title lines.
G. Values by Markers
If this is in effect, Opus displays the underlying value
of a marker in an appropriate place for scatter, line,
bar, and stacked bar charts. Use Pie Appearance to
perform this action for Pie charts.
March 12, 1989 p. 24 Opus v. 2.00
>>> The Options Menu
The items under this menu all act as on/off switches.
A. Character Spacing
When on, Opus uses the information from OPUS.WID to
determine the width of text on the printer. With this
value, it's possible to scale the text string so that it
occupies the same relative width on the screen as it
does on the printer, allowing a much better screen
approximation of the final output. This can be very
important, since many screen fonts are much wider than
their printer counterparts; it's especially important
when you want to display text centered within a box, as
for a chart legend, because the box dimensions are
calculated based on the size of the string.
Note that when turned on, characters may overlap. This
can be especially bad for the vertical axis title on a
color system, but remember, the true extent of the text
is shown (even though it may not be readable!).
Although this feature has no effect upon printing, it
should be left on when saving a standard metafile. That
way, object dimensions are calculated based upon printer
font widths. When you import such a metafile into
Publisher ST, the strings may appear to exceed the
boundaries of a legend box, for example, since Publisher
doesn't perform the "width scaling" on metafile text
that it does on regular text. Fear not, the metafile
will print correctly! If you had saved the metafile
without character spacing, it would look perfect on the
screen in Publisher ST, but the legend box would print
too large, leaving a very noticeable gap at the right
border of the box. This is a true tradeoff, and it's a
consequence of the NON-device independence of GDOS fonts
(I want display Postscript!)
B. Regression
This causes regression lines to be displayed for scatter
charts, provided you have defined ranges for the
regression values. Although you may perform regression
on non-linear models, at present Opus only plots the
linear model properly (others may be supported in future
releases).
C. Rotate Axes
Makes the current horizontal axis vertical and the
current vertical axis horizontal.
D. Show Border
Draws a full box around all charts except Pie.
March 12, 1989 p. 25 Opus v. 2.00
E. Standard Error Bars
This causes the error bars to be displayed, provided you
have defined ranges for the error values. Available for
scatter, line, and bar charts.
>>> The Types Menu
A. Area
Plots an area chart. All dependent values should be
either positive or negative, with no mixing (or, if
anyone can tell me a meaningful way to plot an area
chart with both positive and negative values, I'll try
to implement it). Maximum number of independent axis
values (categories): 48.
B. Bar
Plots a bar chart. Use Bar Spacing to vary width of bars
and distance of bars from tics. Maximum number of
categories: 48.
C. Line
Essentially a "connect the dots" scatter plot. No limit
to number of points.
D. Pie
Plots a pie chart with up to 12 slices. You may explode
any number of slices by clicking on them. Both the Chart
titles and horizontal axis title are printed, if
defined.
E. Scatter
Scatter plot. No formal limit to number of data points.
F. Stacked Bar
The cautions described for area charts apply here as
well.
>>> The Special Menu
Currently, Fill Pattern is the only item available, but object
oriented drawing features may appear here in a future release. To
change the fill pattern for a series, select the series number
from the Fill Pattern dialog (#1-6 = ranges A-F, while #7-12 refer
to the remaining pie slices). Then click on the new pattern and
press OK. If you are viewing a bar, pie, or stacked bar chart,
simply double-click within a marker belonging to the series you
wish to change; the Fill Pattern dialog will appear, indicating
the chosen series. Pie slices are numbered from 1-12, counter-
clockwise.
March 12, 1989 p. 26 Opus v. 2.00
>>> Future Plans
Although I feel this version of Opus is quite complete, there
remain several things I would like to add, such as date/time and
string functions to the worksheet. Also high on my list of
priorities is implementation of some simple object oriented
drawing features for the charting facility. Another possibility is
a curve-fitting feature, which would generate a smooth curve
through a series of points. Finally, I'm always open to ideas, so
let me know what you would like to see.
March 12, 1989 p. 27 Opus v. 2.00